<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // setTimeout(() => {
        //     console.log("1");
        //     setTimeout(() => {
        //         console.log(2);
        //         setTimeout(() => {
        //             console.log(3);
        //         }, 1000);
        //     }, 1000);
        // }, 3000);

        // //同步代码:串行执行
        // //异步代码:并行执行

        // //promise是一个类
        // //利用promise解决上面的嵌套(回调地狱).
        // //promise是用来解决异步嵌套问题.
        // //通过异步成功还是失败,决定promise的状态是成功还是失败,promise支持链式调用.
        // //promise的三种状态:
        // //1.Pending:此时promise的状态还不确定,进行中
        // //2.Fullfilled:成功
        // //3.Rejected:失败
        // //promise的状态一旦确定,就不能改变.


        // const p = new Promise((resolve, reject) => {
        //     //这里进行包装异步代码:定时器,ajax请求
        //     //如果异步操作成功,需要调用resolve(成功的数据);
        //     //如果失败,需要调用reject(错误的原因)
        //     setTimeout(() => {
        //         //resolve("ok")
        //         reject("error")
        //     }, 4000)
        // })
        // p.then((message) => {
        //     console.log("成功了",message);
        // }, () => {
        //     console.log("失败了",message);
        // })

        //消除嵌套
        //duration 延迟时长,n延迟输出的数
        function dely(duration, n) {
            return new Promise((resolve, reject) => {
                setTimeout(() => {
                    resolve(n);
                }, duration);
            })
        }
        dely(2000, 1).then((n1) => {
            console.log(n1);
            return dely(1000, 2)
        }).then((n2) => {
            console.log(n2);
            return dely(1000, 3)
        }).then((n3) => {
            console.log(n3);
        })




    </script>
</body>

</html>